IEEE 754
IEEE 754(アイトリプルイーななごおよん、アイトリプルイーななひゃくごじゅうよん)
IEEE Standard for Floating-Point Arithmetic (ANSI/IEEE Std 754-2008)
単精度は32ビット、倍精度は64ビット
※以降、多分まだ足りない知識があると思うけれど現時点での理解
基本の式
$ (-1)^{\textrm{s}} \times c\times b^\textrm{exponent}
$ s : 符号部、0、1
$ c : 仮数
$ c の範囲は$ 0 \le c \le b^{\textrm{exponent}}
$ \textrm{exponent} : 指数部
$ b : 基数
$ \textrm{exponent} の範囲は$ 1 - \textrm{emax} \le \textrm{exponent} \le \textrm{emax}
$ \textrm{emax} : 指数最大値
式の変形を追いやすくするために符号部、指数部、仮数部を以下にする
符号部$ s 、指数部$ \textrm{biased\_exponent} 、仮数部 $ \textrm{fraction}
基数bが2、$ \textrm{exponent}= \textrm{biased\_exponent} - \textrm{emax} 、仮数部$ 1.\textrm{fraction} のとき
$ (-1)^{\textrm{s}} \times 2^{\textrm{biased\_exponent} - \textrm{emax}} \times 1.\textrm{fraction}
$ \textrm{emax} : 指数最大値
基数には2と10が入る
10進数から2進数への変換
例: -12.625を単精度(32ビット)の浮動小数点に変換
1. 符号部を求める。
符号部がマイナスなので$ s = 1
2. 10進数から2進数に変換
10進数から2進数に変換する処理を$ \textrm{dec2Binary(val)} とする。
※dec2Binary(val)の変換方法
(TODO)
やり方は下記がわかりやすい
$ \textrm{dec2Binary}(|-12.625|) = \textrm{dec2Binary}(12.625)
$ = \textrm{0b}1100.1010
3. 指数部$ \textrm{exponent} を求める
整数部を0b1(1桁)だけにするために、右に小数点の位置をずらす
$ \textrm{0b}1100.1010 = \textrm{0b}1.1001010 \times 2^3
$ 2^{ \textrm{exponent} } = 2^{ 3 }
$ \text{fraction = 1001010}
4. バイアスされた指数部$ \textrm{biased\_exponent} を求める。
$ 2^3 = 2^{\textrm{biased\_exponent} - 127}
単精度の指数最大値$ \textrm{emax} は127
↓ $ 2^{-127} を左辺に移項
$ 2^{3 + 127} = 2^{\textrm{biased\_exponent}}
$ \textrm{biased\_exponent} = 130
$ \textrm{dec2Binary}(\textrm{biased\_exponent}) = \textrm{dec2Binary}(130)
$ \quad = \textrm{0b}10000010
5. 仮数部を求める
右に0埋めする処理を$ \textrm{rpad(val, len, pad)} とする。
$ c = \textrm{rpad}(\textrm{fraction}, 23, 0)
$ = \text{rpad}(1001010, 23, 0) = 10010100000000000000000
6. 1,4,5の符号部、指数部、仮数部を合わせる
$ \textrm{0b}1\_10000010\_10010100000000000000000
確認用
Q. IEEE 754
Q. 10進数の実数を2進数に変換するには
Q. -12.625を単精度のIEEE 754の形式(符号部、指数部、仮数部)で格納するには
関連
参考
IEEE 754 - Solved Problems (Set 1) - YouTube
https://www.youtube.com/watch?v=K-g-qtV_pC8
メモ